home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 8174 / 8174.xpi / chrome / antbar.jar / content / prefs / prefs.js next >
Text File  |  2009-12-30  |  14KB  |  484 lines

  1. // 
  2. //  prefs.js
  3. //  firefox
  4. //  
  5. //  Created by Zak on 2008-06-17.
  6. //  Contributor Brian King (http://briks.si)
  7. //  Copyright 2008-2009 Ant.com. All rights reserved.
  8. // 
  9.  
  10. var AntPrefs = 
  11. {
  12.      /**
  13.       * Preferences, first run and update addons
  14.       */
  15.      init: function ()
  16.      {
  17.        var self = AntPrefs;
  18.        var em = AntLib.CCSV("@mozilla.org/extensions/manager;1", "nsIExtensionManager");
  19.        //obtain toolbar version form the rdf
  20.        var version = em.getItemForID("anttoolbar@ant.com").version;
  21.        var displayMode = self.getAntBranch().getCharPref('mode');
  22.  
  23.        if (displayMode == '')
  24.            self.setDisplayMode('statusbar');
  25.  
  26.        if (version != self.version && self.version != '')
  27.        {
  28.            self.updated();
  29.        }
  30.        else if (self.getAntBranch().getBoolPref("firstrun"))
  31.        {
  32.            self.firstRun();
  33.        }
  34.  
  35.        AntRankService.addButtonId(AntBar.rankLabels['statusbar-button'], AntBar.rankLabels['statusbar-separator']);
  36.        AntRankService.addButtonId(AntBar.rankLabels['toolbar-button']);
  37.  
  38.        self.setDisplayMode(self.getDisplayMode());
  39.        self.version = version;
  40.        self.manageFlvDir();
  41.        self.manageDisplayMode();
  42.        self.setAntUserAgent();
  43.        self.prefWatcher.startup();
  44.        self.flashTrusting();
  45.      },
  46.  
  47.  
  48.      /**
  49.       * Manage the toolbar or the statusbar mode
  50.       */
  51.      manageDisplayMode: function ()
  52.      {
  53.          var self = AntPrefs;
  54.          var enabled = {};
  55.  
  56.          var labels = {
  57.              'toolbar' :    'antToolbar',
  58.              'statusbar':   'ant-video-statusbarpanel',
  59.          }
  60.  
  61.          if (self.getDisplayMode() == 'statusbar')
  62.          {
  63.              enabled[labels['toolbar']]   = false;
  64.              enabled[labels['statusbar']] = true;
  65.          }
  66.          else
  67.          {
  68.              enabled[labels['toolbar']]   = true;
  69.              enabled[labels['statusbar']] = false;
  70.          }
  71.          
  72.          for (var k in enabled)
  73.          {
  74.              AntLib.ob(k).setAttribute('hidden', !enabled[k]);
  75.          }
  76.  
  77.          AntRankService.updateVisible();
  78.      },
  79.  
  80.  
  81.     /**
  82.      * firstRun: is call the absolute first time the toolbar is displayed
  83.      */
  84.     firstRun: function ()
  85.     {
  86.        var self = AntPrefs;
  87.        // Something to consider, asking the user if they want to set the ant search engine as default
  88.  
  89.        setTimeout(function ()
  90.        {
  91.         AntLib.openURL("http://www.ant.com/video-downloader/installed/", true);
  92.        }, 1000);
  93.  
  94.        self.getAntBranch().setBoolPref("firstrun", false);
  95.     },
  96.  
  97.     /**
  98.      * updated: is called after the toolbar has been updated
  99.      */
  100.     updated: function ()
  101.     {
  102.         var self = AntPrefs;
  103.     setTimeout( function () 
  104.         {
  105.         AntLib.openURL("http://www.ant.com/video-downloader/updated/", true);
  106.     }, 1000);
  107.  
  108.         try {
  109.             self.removeJunkAgent();
  110.         }
  111.         catch (e) {
  112.             AntLib.toLog("Error in removeJunkAgent : " + e);
  113.         }
  114.     },
  115.  
  116.     /**
  117.      * etanageFlvDir: create it if doesn't exist, update the preference...
  118.      */
  119.     manageFlvDir: function ()
  120.     {
  121.         var self = AntPrefs;
  122.       var flvDir;
  123.       var appDir;
  124.  
  125.       if (!self.flvDir)
  126.       {
  127.         flvDir = AntLib.CCSV("@mozilla.org/file/directory_service;1", "nsIProperties").get("ProfD", AntLib.CI("nsIFile"));
  128.         appDir = AntLib.CCSV("@mozilla.org/file/directory_service;1", "nsIProperties").get("ProfD", AntLib.CI("nsIFile"));
  129.         flvDir.append("antbar");
  130.         self.flvDir = flvDir.path;
  131.       }
  132.       else
  133.       {
  134.         flvDir = AntLib.CCIN("@mozilla.org/file/local;1", "nsILocalFile");
  135.         flvDir.initWithPath(self.flvDir);
  136.       }
  137.       if (!flvDir.exists())
  138.         flvDir.create(AntLib.CI("nsIFile").DIRECTORY_TYPE, 0777);
  139.     },
  140.  
  141.     /**
  142.      * Display a FilePicker to chose the Video directory
  143.      */
  144.     selectFlvDir: function ()
  145.     {
  146.         var self = AntPrefs;
  147.         var nsIFilePicker = AntLib.CI("nsIFilePicker");
  148.         var fp = AntLib.CCIN("@mozilla.org/filepicker;1", "nsIFilePicker");
  149.         var path = AntLib.ob("AntPrefsFlvDir").value;
  150.     
  151.         if (path)
  152.         {
  153.             var file = AntLib.CCIN("@mozilla.org/file/local;1", "nsILocalFile");
  154.     
  155.             file.initWithPath(path);
  156.             fp.displayDirectory = file;
  157.         }
  158.         fp.init(window, AntLang.getString("AntPrefs.selectFlvDirTxt"), AntLib.CI("nsIFilePicker").modeGetFolder);
  159.         
  160.         var res = fp.show();
  161.         
  162.         if (res == nsIFilePicker.returnOK) 
  163.         {
  164.             path = fp.file.path;
  165.             AntLib.ob("AntPrefsFlvDir").value = path;
  166.             self.flvDir = path;
  167.         }
  168.     },
  169.  
  170.      /**
  171.       * prefWatcher : observe Preferences and change UI if needed
  172.       */
  173.      prefWatcher:
  174.      {
  175.          prefs: null,
  176.  
  177.          startup: function()
  178.          {
  179.              var self = AntPrefs.prefWatcher;
  180.              self.prefs = AntPrefs.getAntBranch();
  181.              self.prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);
  182.              self.prefs.addObserver("", self, false);
  183.          },
  184.          
  185.          shutdown: function()
  186.          {
  187.              var self = AntPrefs.prefWatcher;
  188.              self.prefs.removeObserver("", self);
  189.          },
  190.  
  191.          observe: function (subject, topic, data) 
  192.          {
  193.              var self = AntPrefs.prefWatcher;
  194.  
  195.              if (topic != "nsPref:changed") {
  196.                  AntLib.toLog("not nsPref:changed  topic:" + topic);
  197.                  return;
  198.              }
  199.  
  200.              AntLib.toLog("prefWatcher: changed" + 
  201.                           " topic:" + topic +
  202.                           " subject: " + subject +
  203.                           " data: " + data);
  204.  
  205.              if (data == 'rankmode')
  206.              {
  207.                  var mode = AntPrefs.isRankMode;
  208.                  var add  = AntRankService.addButtonId;
  209.                  var remove = AntRankService.removeButtonId;
  210.                  var labels = AntBar.rankLabels;
  211.  
  212.                  if (mode)
  213.                  {
  214.                      AntLib.toLog('add buttons');
  215.                      add(labels['statusbar-button'], labels['statusbar-separator']);
  216.                      add(labels['toolbar-button']);
  217.                      AntRankService.updateVisible();
  218.                  }
  219.                  else
  220.                  {
  221.                      AntLib.toLog('remove buttons');
  222.                      remove(labels['statusbar-button'], labels['statusbar-separator']);
  223.                      remove(labels['toolbar-button']);
  224.                  }
  225.              }
  226.  
  227.              AntFlvUi.updateMenuDownload(null);
  228.              AntPrefs.manageDisplayMode();
  229.          }
  230.      },
  231.  
  232.         /**
  233.          *  The old version of the toolbar (<= 1.3) added the "Ant Toolbar x.x"
  234.          *  direcly in the general.useragent.extra.firefox String
  235.          *  This function clean it up
  236.          */
  237.          removeJunkAgent: function ()
  238.          {
  239.              var branch = AntLib.CCSV("@mozilla.org/preferences-service;1", "nsIPrefService")
  240.              .getBranch("general.useragent.extra.");
  241.              var ff_agent = branch.getCharPref("firefox");
  242.              var trim = function (s) {
  243.                  return s.replace(/^\s+/, '').replace(/\s+$/, '');
  244.              }
  245.  
  246.              var m;
  247.              var modif = false;
  248.  
  249.              while (m = ff_agent.match(/(.*)Ant\.com Toolbar [0-9]\.[0-9](.*)/))
  250.              {
  251.                  var prefix = trim(m[1]);
  252.                  var sufix  = trim(m[2]);
  253.                  ff_agent = trim((sufix.length == 0) ? (prefix) : (prefix + ' ' + sufix));
  254.                  modif = true;
  255.              }
  256.  
  257.              if (modif)
  258.                  branch.setCharPref('firefox', ff_agent);
  259.          },
  260.  
  261.  
  262.         /**
  263.          * If the user Agent does not contain Ant.com we add it
  264.          */
  265.         setAntUserAgent: function ()
  266.         {
  267.           var self = AntPrefs;
  268.           // Let's not pullute the firefox pref, instead use our own
  269.           // See https://developer.mozilla.org/En/User_Agent_Strings_Reference#Implementation_notes_for_applications.2c_vendors.2c_and_extensions
  270.           var branch = AntLib.CCSV("@mozilla.org/preferences-service;1", "nsIPrefService")
  271.             .getBranch("general.useragent.extra.");
  272.           branch.setCharPref("anttoolbar", "Ant.com Toolbar " + self.version);
  273.         },
  274.  
  275.         /**
  276.          * We remove the useragent at uninstall time
  277.          */
  278.         removeAntUserAgent: function ()
  279.         {
  280.           var branch = AntLib.CCSV("@mozilla.org/preferences-service;1", "nsIPrefService")
  281.             .getBranch("general.useragent.extra.");
  282.           branch.clearUserPref("anttoolbar");
  283.         },
  284.  
  285.         /**
  286.          * Remove the addon preferences at uninstall
  287.          */
  288.         cleanEnvironement: function ()
  289.         {
  290.           var branch = AntLib.CCSV("@mozilla.org/preferences-service;1", "nsIPrefService")
  291.           .deleteBranch("extensions.anttoolbar.");
  292.         },
  293.  
  294.     /**
  295.      *    Return the domain from an url
  296.      */
  297.     getDomain: function (url)
  298.     {
  299.         url += "";
  300.         if (!url)
  301.             return false;
  302.         var match = url.match(/^https?:\/\/(?:[\w]+\.)*([\w-]+\.[\w-]+)/);
  303.  
  304.         if (!match || match.length < 2)
  305.             return false;
  306.         return match[1];
  307.     },
  308.     
  309.     /**
  310.      * return the Ant pref branch
  311.      */
  312.     getAntBranch: function ()
  313.     {
  314.         return AntLib.CCSV("@mozilla.org/preferences-service;1", "nsIPrefService")
  315.                 .getBranch("extensions.anttoolbar.");
  316.     },
  317.     
  318.      /**
  319.       * make Flash trust our flv player 
  320.       */
  321.      flashTrusting: function ()
  322.      {
  323.          var self = AntPrefs;
  324.          var home = AntLib.CCSV("@mozilla.org/file/directory_service;1", "nsIProperties").get("Home", AntLib.CI("nsIFile"));
  325.          var foStream = AntLib.CCIN("@mozilla.org/network/file-output-stream;1", "nsIFileOutputStream");
  326.          var data = "chrome://antbar/content/player/\n";
  327.          var os = AntLib.getOsName();
  328.          
  329.          switch (os)
  330.          {
  331.          case "Linux":
  332.              home = self.mkchdir(home, ".macromedia");
  333.              if (!home)
  334.                  return ;
  335.              home = self.mkchdir(home, "Flash_Player");
  336.              break;
  337.  
  338.          case "WINNT":
  339.              if (!self.mkchdir(home, "Application Data"))
  340.                  return;    
  341.              if (!self.mkchdir(home, "Macromedia"))
  342.                  return ;
  343.              if (!self.mkchdir(home, "Flash Player"))
  344.                  return ;
  345.              break;
  346.  
  347.          case "Darwin":
  348.              if (!self.mkchdir(home, "Library"))
  349.                  return ;
  350.              if (!self.mkchdir(home, "Preferences"))
  351.                  return ;
  352.              if (!self.mkchdir(home, "Macromedia"))
  353.                  return ;
  354.              if (!self.mkchdir(home, "Flash Player"))
  355.                  return ;
  356.  
  357.              break;
  358.          default:
  359.              AntLib.toLog("os Not found in AntPrefs");
  360.          }
  361.  
  362.          if (!home)
  363.              return ;
  364.          home = self.mkchdir(home, "#Security");
  365.          if (!home)
  366.              return ;
  367.  
  368.          home = self.mkchdir(home, "FlashPlayerTrust");
  369.          home.append("antbar.cfg");
  370.          if (home.exists())
  371.              return ;
  372.          home.create(AntLib.CI("nsIFile").NORMAL_FILE_TYPE, 0777);
  373.  
  374.          foStream.init(home, 0x02 | 0x08 | 0x20, 0666, 0); // write, create, truncate
  375.          foStream.write(data, data.length);
  376.          foStream.close();
  377.      },
  378.  
  379.      /**
  380.       * Create the directory if it does not exist  and change dir
  381.       */
  382.      mkchdir: function (dir, to)    
  383.      {
  384.          dir.append(to);
  385.          if (!dir.exists())
  386.          {
  387.              try
  388.              {
  389.                  dir.create(AntLib.CI("nsIFile").DIRECTORY_TYPE, 0777);
  390.              }
  391.              catch (e)
  392.              {
  393.                  AntLib.toLog("AntPrefs.mkchdir ERROR = " + e);
  394.                  return false;
  395.              }
  396.          }
  397.          if (!dir.isDirectory())
  398.          {
  399.              return false;
  400.          }
  401.          return dir;
  402.      },
  403.  
  404.  
  405.      /**
  406.       * Geters/Seters for extension preferences
  407.       */
  408.      getDisplayMode: function()
  409.      {
  410.          var self  = AntPrefs;
  411.          var value = self.getAntBranch().getCharPref('mode');
  412.          if (value != 'statusbar')
  413.              return 'toolbar';
  414.          return value;
  415.      },
  416.  
  417.      setDisplayMode: function(value)
  418.      {
  419.          var self = AntPrefs;
  420.          self.getAntBranch().setCharPref("mode", value);
  421.      },
  422.  
  423.      get flvDir()
  424.      {
  425.          var self = AntPrefs;
  426.          return self.getAntBranch().getCharPref("flvdir");
  427.      },
  428.      set flvDir(value)
  429.      {
  430.          var self = AntPrefs;
  431.          self.getAntBranch().setCharPref("flvdir", value);
  432.      },
  433.     
  434.      get flvToPlay()
  435.      {
  436.          var self = AntPrefs;
  437.          return self.getAntBranch().getCharPref("flvToPlay");
  438.      },
  439.      set flvToPlay(value)
  440.      {
  441.          var self = AntPrefs;
  442.          self.getAntBranch().setCharPref("flvToPlay", value);
  443.      },
  444.  
  445.      get isRankMode()
  446.      {
  447.          var self = AntPrefs;
  448.          return self.getAntBranch().getBoolPref("rankmode");
  449.      },
  450.      set isRankMode(value)
  451.      {
  452.          var self = AntPrefs;
  453.          self.getAntBranch().setBoolPref("rankmode", value);
  454.      },
  455.  
  456.      get version()
  457.      {
  458.          var self = AntPrefs;
  459.          return self.getAntBranch().getCharPref("version");
  460.      },
  461.      set version(value)
  462.      {
  463.          var self = AntPrefs;
  464.          self.getAntBranch().setCharPref("version", value);
  465.      },
  466.  
  467.      get isNotification()
  468.      {
  469.          var self = AntPrefs;
  470.          return self.getAntBranch().getBoolPref("notification");
  471.      },
  472.      set isNotification(value)
  473.      {
  474.          var self = AntPrefs;
  475.          self.getAntBranch().setBoolPref("notification", value);
  476.      },
  477.  
  478.      get canSendStats()
  479.      {
  480.          var self = AntPrefs;
  481.          return self.getAntBranch().getBoolPref("videorepports");
  482.      }
  483. };
  484.